/**
  @file     	Mouse.h 
  @brief    	all kinds of Mouse
  @author  	arvin
  @version 	1.0   2012/12/14
 */

#ifndef CXX_MOUSE_H
#define CXX_MOUSE_H
#include "ProductDef.h"

class Mouse
{
public:

	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
    virtual ~Mouse() = 0;

	/**
	* Operation
	*
	* @param VOID
	* @return 
	*/
	virtual VOID Operation() = 0;

	/**
	* GetManufacturer
	*
	* @param VOID
	* @return MANUFACTURER_TYPE
	*/
	MANUFACTURER_TYPE GetManufacturer();

protected:
	/**
	* Construction
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return 
	*/
	Mouse(MANUFACTURER_TYPE eManufacturer);


	/**
	* SetManufacturer
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	VOID SetManufacturer(MANUFACTURER_TYPE eManufacturer);
private:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	Mouse();

	/**
	* Copy Construction
	*
	* @param const Mouse& cMouse
	* @return 
	*/
	Mouse(const Mouse& cMouse);

	/**
	* Assignment
	*
	* @param const Mouse& cMouse
	* @return Mouse&
	*/
	Mouse& operator=(const Mouse& cMouse);

public:
protected:
private:
	MANUFACTURER_TYPE m_eManufacturer;
};

class DELLMouse : public Mouse
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return 
	*/
	DELLMouse();

	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
	virtual ~DELLMouse();

	/**
	* Operation
	*
	* @param VOID
	* @return 
	*/
	virtual VOID Operation();

protected:
private:
	
	/**
	* Copy Construction
	*
	* @param const DELLMouse& cASUSMouse
	* @return 
	*/
	DELLMouse(const DELLMouse& cDELLMouse);

	/**
	* Assignment
	*
	* @param const DELLMouse& cASUSMouse
	* @return DELLMouse&
	*/
	DELLMouse& operator=(const DELLMouse& cDELLMouse);

public:
protected:
private:
};

class ASUSMouse : public Mouse
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return 
	*/
	ASUSMouse();

	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
	virtual ~ASUSMouse();

	/**
	* Operation
	*
	* @param VOID
	* @return 
	*/
	virtual VOID Operation();

protected:
private:
	
	/**
	* Copy Construction
	*
	* @param const ASUSMouse& cASUSMouse
	* @return 
	*/
	ASUSMouse(const ASUSMouse& cASUSMouse);

	/**
	* Assignment
	*
	* @param const ASUSMouse& cASUSMouse
	* @return ASUSMouse&
	*/
	ASUSMouse& operator=(const ASUSMouse& cASUSMouse);

public:
protected:
private:
};

class HPMouse : public Mouse
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return 
	*/
	HPMouse();

	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
	virtual ~HPMouse();

	/**
	* Operation
	*
	* @param VOID
	* @return 
	*/
	virtual VOID Operation();

protected:
private:
	
	/**
	* Copy Construction
	*
	* @param const HPMouse& cHPMouse
	* @return 
	*/
	HPMouse(const HPMouse& cHPMouse);

	/**
	* Assignment
	*
	* @param const HPMouse& cHPMouse
	* @return HPMouse&
	*/
	HPMouse& operator=(const HPMouse& cHPMouse);

public:
protected:
private:
};


#endif	/* >>CXX_MOUSE_H<< */
/* EOF */